package controllers

import (
	// "log"
	// "encoding/asn1"
	// "log"
	"log"
	"main/src/core"
	"strings"
	"time"

	"main/src/models"
	"os"

	// "log"
	"github.com/gofiber/fiber/v2"
)

func GetOtchetPDChilds(c *fiber.Ctx) error {
	params := c.Queries()
	xlheaders := map[string]string{"NPC": "№ лич. дела", "Name": "Ф.И.О. учащегося", "Birth": "Дата рожд.", "SNILS": "СНИЛС", "PName": "Законные представители", "PSNILS": "СНИЛС заявителя", "PBirth": "Дата рождения заявителя"}
	URI := os.Getenv("ES2LOGINFORM")
	otchetURI := os.Getenv("ES2PDCOTCHETURI")
	es2login := os.Getenv("ES2USERNAME")
	es2password := os.Getenv("ES2PASSWORD")
	// es2schoolIds := map[string]string{"СОШ №1": "s1050", "Гимназия №2": "s1052"}
	es2schoolIds := map[string]string{
		"СОШ №01": "s1050", "Гимназия №02": "s1052", "ООШ №06": "s1053",
		"ООШ №08": "s1054", "СОШ №09": "s1056", "ООШ №10": "s1057",
		"СОШ №11": "s1058", "ООШ №13": "s1059", "СОШ №15": "s1060",
		"СОШ №19": "s1100", "СОШ №20": "s1063", "СОШ №24": "s1064",
		"ООШ №26": "s1067", "СОШ №30": "s1065", "ООШ №31": "s1069",
		"ООШ №34": "s1070", "ООШ №37": "s1073", "ООШ №70": "s1074",
		"ООШ №164": "s1077",
	}

	otchet, err := models.FetchES2PDChildsOtchetByName("Общие сведения об обучающихся")
	if _, ok := params["force_update"]; err == nil && !ok {
		daynow := time.Now().Format("2006-01-02")[8:10]
		dayotchet := otchet.UpdatedAt.Format("2006-01-02")[8:10]
		if daynow == dayotchet {
			return c.JSON(fiber.Map{"status": "success", "state": "actual", "message": "ES2Otchet получен из базы данных", "otchet": otchet})
		} else {
			return c.JSON(fiber.Map{"status": "success", "state": "outdated", "message": "ES2Otchet получен из базы данных", "otchet": otchet})
		}
	}

	authSess := core.ES2Auth(URI, es2login, es2password)
	data := map[string]map[string][]string{}

	for sch, id := range es2schoolIds {
		otchetURL := strings.Replace(otchetURI, "{csrf}", authSess.Csrf, -1)
		otchetURL = strings.Replace(otchetURI, "{schid}", id, -1)
		
		xls, err := core.DownloadFile(otchetURL, authSess.Cookies)
		if err != nil {
			log.Println("ERROR: ", err)
			return c.JSON(fiber.Map{"status": "fail", "message": "Не удалось загрузить файл отчета из ЭШ 2.0", "otchet": nil})
		}

		xldata, err := core.ParseXLS(xls, xlheaders, 3)
		if err != nil {
			log.Println("ERROR: ", err)
			return c.JSON(fiber.Map{"status": "fail", "message": "Не удалось распарсить файл отчета из ЭШ 2.0", "otchet": nil})
		}
		data[sch] = xldata
	}

	otchet, err = models.ES2PDChildsOtchet.LoadFromMap(models.ES2PDChildsOtchet{}, data, xlheaders)
	if err != nil {
		log.Println("ERROR: ", err)
		return c.JSON(fiber.Map{"status": "fail", "message": "Не удалось создать отчет", "otchet": nil})
	}

	return c.JSON(fiber.Map{"status": "success", "state": "actual", "message": "ES2Otchet успешно сохранен", "otchet": otchet})
}
 
func RenderOtchetPDChilds(c *fiber.Ctx) error {
	return c.Render("es2index", fiber.Map{
		"Title": "Отчеты: ЭШ 2.0[Общие сведения об обучающихся]",
		"Api": "/es2/api/v1/",
		"OtchetPDCURLGet": "otchet/pdchild/get",
	}) 
}
